/*
 * @Date: 2023-09-21 13:21:15
 * @LastEditors: uphldjx 1373577124@qq.com
 * @LastEditTime: 2024-02-22 18:04:59
 * @FilePath: \NingxiangElderlyCare\src\views\aplid\ReportView\utils\report.js
 */
import remoteLoad from './remoteLoad.js'
/**
 * 动态插入css
 */
export const loadStyle = (url) => {
	const link = document.createElement('link')
	link.rel = 'stylesheet'
	link.href = url
	const head = document.getElementsByTagName('head')[0]
	head.appendChild(link)
}

export const initLucksheet = async () => {
	let preStr = window.location.host == 'mzj.nanjing.gov.cn' ? '/nxyl' : ''
	if (!window.luckysheet) {
		await remoteLoad(preStr+'/luckysheet/plugins/js/plugin.js')
		await remoteLoad(preStr+'/luckysheet/luckysheet.umd.js')
	}
}

export const loadLucksheetCss = () => {
	let preStr = window.location.host == 'mzj.nanjing.gov.cn' ? '/nxyl' : ''
	const urls = [
		'/luckysheet/plugins/css/pluginsCss.css',
		'/luckysheet/plugins/plugins.css',
		'/luckysheet/css/luckysheet.css',
		'/luckysheet/assets/iconfont/iconfont.css',
	]
	urls.forEach((element) => {
		loadStyle(preStr + element)
	})
}

export const showtoolbarConfig = {
	save: false,
	preview: false,
	undoRedo: false, //撤销重做，注意撤消重做是两个按钮，由这一个配置决定显示还是隐藏
	paintFormat: false, //格式刷
	currencyFormat: false, //货币格式
	percentageFormat: false, //百分比格式
	numberDecrease: false, // '减少小数位数'
	numberIncrease: false, // '增加小数位数
	moreFormats: false, // '更多格式'
	font: false, // '字体'
	fontSize: false, // '字号大小'
	bold: false, // '粗体 (Ctrl+B)'
	italic: false, // '斜体 (Ctrl+I)'
	strikethrough: false, // '删除线 (Alt+Shift+5)'
	underline: false, // '下划线 (Alt+Shift+6)'
	textColor: false, // '文本颜色'
	fillColor: false, // '单元格颜色'
	border: false, // '边框'
	mergeCell: false, // '合并单元格'
	horizontalAlignMode: false, // '水平对齐方式'
	verticalAlignMode: false, // '垂直对齐方式'
	textWrapMode: false, // '换行方式'
	textRotateMode: false, // '文本旋转方式'
	image: false, // '插入图片'
	link: false, // '插入链接'
	chart: false, // '图表'（图标隐藏，但是如果配置了chart插件，右击仍然可以新建图表）
	postil: false, //'批注'
	pivotTable: false, //'数据透视表'
	function: false, // '公式'
	frozenMode: false, // '冻结方式'
	sortAndFilter: false, // '排序和筛选'
	conditionalFormat: false, // '条件格式'
	dataVerification: false, // '数据验证'
	splitColumn: false, // '分列'
	screenshot: false, // '截图'
	findAndReplace: false, // '查找替换'
	protection: false, // '工作表保护'
	print: false, // '打印'
	export: false,
}
export const sheetBaseConfig = (args = {}, toolConfig) => {
	const config = {
		lang: 'zh',
		showinfobar: false, //  是否显示顶部信息栏
		showsheetbar: false, // 默认就是true，可以不设置
		showsheetbarConfig: {
			add: false,
			menu: false,
		},
		showtoolbarConfig: {
			save: false,
			preview: false,
			undoRedo: true, //撤销重做，注意撤消重做是两个按钮，由这一个配置决定显示还是隐藏
			paintFormat: true, //格式刷
			currencyFormat: true, //货币格式
			percentageFormat: true, //百分比格式
			numberDecrease: false, // '减少小数位数'
			numberIncrease: false, // '增加小数位数
			moreFormats: false, // '更多格式'
			font: true, // '字体'
			fontSize: true, // '字号大小'
			bold: true, // '粗体 (Ctrl+B)'
			italic: true, // '斜体 (Ctrl+I)'
			strikethrough: true, // '删除线 (Alt+Shift+5)'
			underline: true, // '下划线 (Alt+Shift+6)'
			textColor: true, // '文本颜色'
			fillColor: true, // '单元格颜色'
			border: true, // '边框'
			mergeCell: true, // '合并单元格'
			horizontalAlignMode: true, // '水平对齐方式'
			verticalAlignMode: true, // '垂直对齐方式'
			textWrapMode: true, // '换行方式'
			textRotateMode: true, // '文本旋转方式'
			image: true, // '插入图片'
			link: true, // '插入链接'
			chart: true, // '图表'（图标隐藏，但是如果配置了chart插件，右击仍然可以新建图表）
			postil: true, //'批注'
			pivotTable: false, //'数据透视表'
			function: true, // '公式'
			frozenMode: true, // '冻结方式'
			sortAndFilter: true, // '排序和筛选'
			conditionalFormat: true, // '条件格式'
			dataVerification: true, // '数据验证'
			splitColumn: true, // '分列'
			screenshot: true, // '截图'
			findAndReplace: true, // '查找替换'
			protection: true, // '工作表保护'
			print: true, // '打印'
			...toolConfig,
		},
		showstatisticBarConfig: {
			count: false, // 计数栏
			view: false, // 打印视图
			zoom: false, // 缩放
		},
		// rowHeaderWidth: 0,// 不显示行标号
		// columnHeaderHeight: 0, //不显示列标号
		devicePixelRatio: window.devicePixelRatio, //设备比例，比例越大表格分辨率越高
		defaultFontSize: 12, // 默认字体
		sheetFormulaBar: false, // 是否显示公式栏
		cellRightClickConfig: {
			hideRow: false, // 隐藏选中行和显示选中行
			hideColumn: false, // 隐藏选中列和显示选中列
			rowHeight: true, // 行高
			columnWidth: true, // 列宽
			matrix: false, // 矩阵操作选区
			sort: false, // 排序选区
			filter: false, // 筛选选区
			chart: false, // 图表生成
			image: true, // 插入图片
			link: true, // 插入链接
			data: false, // 数据验证
			cellFormat: false, // 设置单元格格式
		},
		loading: {
			image: () => {
				return `<svg viewBox="25 25 50 50" class="circular">
					<circle cx="50" cy="50" r="20" fill="none"></circle>
					</svg>`
			},
			imageClass: 'loadingAnimation',
		},
		...args,
	}
	return config
}

export const reportDataBaseConfig = (args) => {
	if (args.celldata) {
		args.celldata = args.celldata.map((item) => {
			if (item.v.v) {
				item.v.v = String(item.v.v).replaceAll(/&nbsp;/g, (str) => {
					return '    '
				})
			}
			return item
		})
	}

	const config = [
		{
			name: 'report', //工作表名称
			color: '', //工作表颜色
			index: 0, //工作表索引
			status: 1, //激活状态
			order: 0, //工作表的下标
			hide: 0, //是否隐藏
			row: 25, //行数
			column: 18, //列数
			// 行数和列数都设置为1可以自动去掉空的单元格
			defaultRowHeight: 19, //自定义行高
			defaultColWidth: 73, //自定义列宽
			celldata: [], //初始化使用的单元格数据
			showinfobar: false, //  是否显示顶部信息栏
			showsheetbar: false, // 默认就是true，可以不设置
			showsheetbarConfig: {
				add: false,
				menu: false,
			},
			showtoolbarConfig: {},
			defaultFontSize: 12, // 默认字体
			sheetFormulaBar: false, // 是否显示公式栏
			config: {
				merge: {}, //合并单元格
				rowlen: {}, //表格行高
				columnlen: {}, //表格列宽
				rowhidden: {}, //隐藏行
				colhidden: {}, //隐藏列
				// borderInfo: [
				// 	{
				// 		borderType: 'border-all',
				// 		color: '#000',
				// 		rangeType: 'range',
				// 		style: '1',
				// 		range: [
				// 			{
				// 				column: [0, 100],
				// 				row: [0, 100],
				// 			},
				// 		],
				// 	},
				// ],
				authority: {}, //工作表保护
			},
			scrollLeft: 0, //左右滚动条位置
			scrollTop: 315, //上下滚动条位置
			luckysheet_select_save: [], //选中的区域
			calcChain: [], //公式链
			isPivotTable: false, //是否数据透视表
			pivotTable: {}, //数据透视表设置
			filter_select: {}, //筛选范围
			filter: null, //筛选配置
			luckysheet_alternateformat_save: [], //交替颜色
			luckysheet_alternateformat_save_modelCustom: [], //自定义交替颜色
			luckysheet_conditionformat_save: {}, //条件格式
			frozen: {}, //冻结行列配置
			chart: [], //图表配置
			zoomRatio: 1, // 缩放比例
			image: [], //图片
			showGridLines: 1, //是否显示网格线
			dataVerification: {}, //数据验证配置
			...args,
		},
	]
	return config
}

/**
 * report 数据处理-排除空数据
 * @param reportOptions
 * @returns
 */
export const reportTransFormateData = (reportOptions) => {
	reportOptions = JSON.parse(JSON.stringify(reportOptions))
	const formateCellData = (celldata) => {
		const [cells, rows] = [[], []]
		celldata.forEach((item) => {
			const rowLen = celldata
				.filter((col) => col.r == item.r)
				.map((item) => item.v?.m)
				.filter(Boolean).length
			if ((item.v.m || item.v.m == 0) && rowLen > 0) {
				cells.push(item.c)
				rows.push(item.r)
			}
		})
		const [maxCell, maxRows] = [[...new Set(cells)], [...new Set(rows)]]
		const tempData = []
		celldata.map((item) => {
			if (maxCell.includes(item.c) && maxRows.includes(item.r)) {
				tempData.push(item)
			}
		})
		return {
			maxCell: maxCell.length,
			maxRows: maxRows.length,
			cellData: tempData,
		}
	}
	const formateData = formateCellData(reportOptions.celldata)
	const reportData = window.luckysheet
		.transToData(reportOptions.celldata)
		.map((row) => {
			const tempData = row.filter((item) => item && (item.v || item.m))
			if (tempData.length > 0) {
				return row
			}
		})
		.filter(Boolean)
	const options = {
		...reportOptions,
		data: [],
		celldata: window.luckysheet.transToCellData(reportData),
		row: formateData.maxRows,
		column: formateData.maxCell,
	}
	return options
}
// 图表推荐主题
export const themeColor = [
	{
		label: '主题一',
		value: ['#0090FF', '#36CE9E', '#FFC005', '#FF515A', '#8B5CFF', '#00CA69', 'rgba(50,123,250,0.7)', '#14C9C9', '#792E00', '#7EB712', '#23C343'],
	},
	{
		label: '主题二',
		value: ['#5720A9', '#1DDA44', '#1D24DA', '#DA701D', '#DA1D34', '#1DBCDA', '#9FDB1D', '#00B42A', '#00B42A', '#D91AD9', '#86909c'],
	},
	{
		label: '主题三',
		value: ['#86D560', '#AF89D6', '#59ADF3', '#FF999A', '#FFCC67', '#c2c1bd', '#00a1e5', '#23c768', '#e5ce10', '#ff7e00', '#fe0000'],
	},
	{
		label: '主题四',
		value: ['#3491FA', '#F53F3F', '#F7BA1E', '#9FDB1D', '#00B42A', '#00B42A', '#c2c1bd', '#00a1e5', '#23c768', '#e5ce10', '#ff7e00'],
	},
	{
		label: '主题五',
		value: ['#4D000A', '#770813', '#A1151E', '#CB272D', '#F53F3F', '#F76560', '#F98981', '#FBACA3', '#FDCDC5', '#FFECE8', '#FFECE8'],
	},
	{
		label: '主题六',
		value: ['#000D4D', '#031A79', '#072CA6', '#0E42D2', '#0E42D2', '#4080FF', '#6AA1FF', '#94BFFF', '#BEDAFF', '#E8F3FF', '#165DFF'],
	},
	{
		label: '主题七',
		value: ['#004D1C', '#006622', '#008026', '#009A29', '#00B42A', '#23C343', '#4CD263', '#7BE188', '#AFF0B5', '#E8FFEA', '#00B42A'],
	},
	{
		label: '主题八',
		value: ['#4D3800', '#785D03', '#A38408', '#CFAF0F', '#FADC19', '#FBE842', '#FCF26B', '#FDFA94', '#FEFEBE', '#FEFFE8', '#FADC19'],
	},
	{
		label: '主题九',
		value: ['#1d2129', '#272e3b', '#4e5969', '#6b7785', '#86909c', '#a9aeb8', '#c9cdd4', '#e5e6eb', '#f2f3f5', '#f7f8fa', '#6b7785'],
	},
	{
		label: '主题十',
		value: ['#001A4D', '#063078', '#114BA3', '#206CCF', '#3491FA', '#57A9FB', '#7BC0FC', '#9FD4FD', '#C3E7FE', '#E8F7FF', '#E8F7FF'],
	},
]
